// 建立 WebSocket 服务
// 
// 第一个参数为服务路径： /ws
// 第二个参数为与前端建立连接时会调用的回调函数
//   ws 相当于建立 WebSocket 的实例
//   req 为建立连接的请求
function nobadyroom(app) {
    var nobodyclients = []
    var msgList = []
    app.ws('/nobodyws', function (ws, req) {
        nobodyclients.push(ws)
        console.log('链接数', nobodyclients.length)
        // 使用 on 方法监听事件
        //   message 事件表示从另一段（服务端）传入的数据
        ws.on('message', function (msg) {
            console.log(`receive message ${msg}`)
        })
        // 设置定时发送消息
        // let timer = setInterval(() => {
        //     ws.send(`interval message ${new Date()}`)
        // }, 2000)

        // close 事件表示客户端断开连接时执行的回调函数
        ws.on('close', function (e) {
            for (var index = 0; index < nobodyclients.length; index++) {
                if (nobodyclients[index] == this) {
                    nobodyclients.splice(index, 1)
                }
            }
            console.log('链接数', nobodyclients.length)
        })
    })

    //匿名聊天室消息发送接口
    app.post('/nobodysay', function (req, res) {
        console.log(req.body)
        let msg = req.body
        if (isNull(msg.name) || isNull(msg.text)) {
            res.send(300)
        }else{
            msg.time = Date.now()
            for (var index = 0; index < nobodyclients.length; index++) {
                try {
                    nobodyclients[index].send(JSON.stringify(req.body))
                } catch (error) {
                    nobodyclients[index].close()
                }
            }
            res.send('200')
            msgList.push(msg)
        }
        if (msgList.length > 1000) {
            msgList.splice(0, 1)
        }
    })

    //匿名聊天室历史消息接口
    app.post('/nobodysayhistory', function (req, res) {
        console.log(req.body)
        let msg = req.body
        if (isNull(msg.time)) {
            res.send(300)
        }else{
            let list = []
            for (var index = 0; index < msgList.length; index++) {
                if (msgList[index].time > msg.time) {
                    list.push(msgList[index])
                }
            }
            res.send(list)
        }
    })
}

function isNull(params) {
    if (params !== undefined && params !== null && params !== '') {
        return false
    }
    return true
}

module.exports ={nobadyroom}